package top.minuy.structure.stack;

import top.minuy.structure.linear.linked.LinkedList;
/**
 * @author Minuy
 * @time 17:16
 * @date 2021/8/23
 */
public class LinkedListStack<E> implements Stack<E> {

    LinkedList<E> linkedList;

    public LinkedListStack(){
        this.linkedList = new LinkedList<E>();
    }

    /**
     * 入栈，向栈中添加一个元素
     *
     * @param e 要添加的元素
     */
    @Override
    public void push(E e) {
        this.linkedList.addFirst(e);
    }

    /**
     * 出栈，从栈顶拿出一个元素
     *
     * @return 拿出的元素
     */
    @Override
    public E pop() {
        return this.linkedList.removeFirst();
    }

    /**
     * 看一下栈顶的元素是谁
     *
     * @return 栈顶的元素
     */
    @Override
    public E peek() {
        return this.linkedList.getFirst();
    }

    /**
     * 获取栈中元素的个数
     *
     * @return 元素个数
     */
    @Override
    public int getSize() {
        return this.linkedList.getSize();
    }

    /**
     * 看下栈是否为空
     *
     * @return 栈是否为空
     */
    @Override
    public boolean isEmpty() {
        return this.linkedList.isEmpty();
    }

    @Override
    public String toString() {
        StringBuilder res = new StringBuilder();
        res.append(String.format("Linked List Stack : size = %d\n",this.getSize()));
        res.append("top \n");
        res.append(this.linkedList.toString());
        return res.toString();
    }
}
